1) O documento é um trabalho escolar sobre linguagens de programação realizado por três alunos da escola secundária de Santo André.
2) O trabalho aborda conceitos básicos de programação, tipos de linguagens, história da linguagem C e suas características e objetivos.
3) Inclui seções sobre código fonte, código máquina, compiladores e interpretadores.
2. ESCOLA SECUNDÁRIA DE SANTO ANDRÉ
Curso e Turma:
Instalação e Manutenção de Sistemas Informáticos, EFA
4S
Disciplina:
Programação Web
Nome do Trabalho:
Linguagens de Programação
Nome do Aluno:
Miguel Marques, Paulo Rosário e Bruno Gonçalves
Nome do Formador:
Guilherme Batista
Data do Trabalho:
03-12-2009
2
3. ÍNDICE
1. Introdução pág: 3
2. Índice pag. 4
3. Principais concitos na área da programaçãoC pág: 5
4. Tipos de Linguagens pág: 6 a 8
5. História da Linguagem pág: 9 a 11
6. Objectivos e Características da Linguagem C pág: 11 a 16
7. Código Fonte pág: 17
8. Código Máquina pág: 17 a 18
9. Software de tradução pág: 18
10. Compilador pág: 18 a 19
11. Interpretador pág: 20
12. Conclusão pág: 21
13. Referencias Bibliográficas pág : 22
3
4. Introdução
Neste trabalho vai ser feita uma pequena abordagem ao mundo da programação, seus
principais conceitos e os vários tipos de linguagens de programação. Depois ficaremos a
conhecer uma das línguas mais influentes no interior da programação, quais as suas
características e os seus objectivos. Vamos também neste trabalho abordar a definição
de código máquina e código fonte, falaremos também de compiladores e interpretadores
quais as suas funções as suas diferenças.
4
5. Principais conceitos na área da programação
Antes de falarmos do que são, de como são constituídas e de como evoluíram, será
apresentada a definição de certos conceitos importantes e que serão varias vezes falados
mais á frente.
Algoritmo
“É uma sequência finita de instruções bem definidas e não ambíguas, sendo que cada
uma pode ser executada mecanicamente num período de tempo finito e com uma
quantidade de esforço finita” Wikipedia
É a forma através da qual resolvemos problemas, é a descrição, de forma lógica, dos
passos que devem ser tomados para ser realizada uma dada tarefa.
Programa
Um programa de computador, ou software, é um conjunto de instruções que descrevem
a forma como uma tarefa que será executada por um computador. Um programa oferece
ao utilizador a possibilidade de realizar uma ou mais tarefas específicas. A programação
será então a ciência que nos permite criar programas.
Linguagens de programação
Assim como outra língua qualquer, as linguagens de programação obedecem a um
conjunto de regras sintácticas e semânticas usadas para definir o programa. É utilizado
um conjunto de códigos composto, por palavras e símbolos, que constituem o código
fonte do programa. Para o processador executar um programa, o código fonte necessita
de ser traduzido para código máquina. Existem vários tipos de linguagens, sendo que
cada uma delas tem características e aplicações diferentes. Toda a linguagem de
programação têm um ambiente de programação, por exemplo bloco de notas do
Windows, e algumas podem ter mais que um ambiente. Podemos classifica-las de
acordo com o paradigma de programação, gerações, quanto ao grau de abstracção e
de acordo com o tipo de estrutura.
5
6. Paradigma de Programação
O paradigma é basicamente a ideia central onde se baseia a linguagem, existindo 4
paradigmas:
Paradigma Imperativo – que se baseia em comandos e procedimentos
Ex: Pascal, C e Fortran.
Paradigma Orientado a Objectos - baseado em objectos e classes.
Ex: Java, Simula e Smalltalk.
Paradigma Funcional – que se baseia em funções.
Ex: Haskel, Lisp, ML, Scheme.
Paradigma Lógico - baseado na lógica de predicados, factos e regras.
Ex: Prolog, Life, Mercury
Diferentes níveis ou graus de abstracção das linguagens
- Linguagens de máquina;
- Linguagens de baixo nível;
- Linguagens de alto nível.
Linguagens de máquina
As linguagens de máquina são linguagens de baixo nível e fornecem ao computador as
operações fundamentais para seu funcionamento. Cada instrução é geralmente formada
por um código de operação e um ou dois endereços de memória. É a única linguagem
compreendida pelo processador, pois utiliza unicamente a notação binária, 0's e 1's ou
On e Off. Apesar de ser mais rápida que a linguagem de alto nível, é bastante mais
difícil de utilizar. A programação de um algoritmo complexo neste tipo de linguagem é
complexa, cansativa e fortemente sujeita a erros, sendo depois quase impossível
encontrar o erro. As linguagens de máquina são dependentes do processador, ou seja,
uma determinada linguagem de máquina só poderá usada por um tipo de computador.
Exemplo de uma pequena porção do código máquina do processador desenhado por
Von Neumman em 1946:
000000101011110010100000001011111100100000000011001110101000
6
7. Linguagens de baixo nível
Foram projectadas minimizar as dificuldades da programação em notação binária. São
bastante próximas das linguagens de máquina, mantendo a mesma estrutura e conjunto
de instruções, mas permite que o programador utilize nomes, chamados mnemónicos, e
símbolos em lugar dos 0’s e 1’s. São chamadas de linguagens Assembly ou
montagem. Os programas são executados com maior velocidade de processamento e
ocupam menos espaço na memória. Por outro lado os programas em Assembly tem
pouca portabilidade, o código criado para um tipo processador não serve para outro
diferente, e não são estruturados o que torna a programação mais difícil. Nesta
linguagem a maioria das instruções são representações simbólicas de instruções de
linguagem máquina. O processamento de um programa em linguagem simbólica requer
tradução para linguagem de máquina antes de ele ser executado pelo processador.
Linguagens de alto nível
São as mais próximas à linguagem humana e mais distantes das linguagens de máquina,
o que torna mais fácil a sua compreensão. Utilizam uma sintaxe estruturada que torna o
seu código mais legível e fazem uso de palavras reservadas como READ, WRITE,
TYPE, etc. São precisos compiladores ou interpretadores para gerar instruções do
microprocessador, que permitem, teoricamente, que possa a linguagem possa ser
utilizada em qualquer computador. Os interpretadores fazem a interpretação de cada
instrução do programa fonte e executa-a dentro de um ambiente de programação, por
exemplo Basic e Java. Os compiladores traduzem todas as instruções do programa
fonte gerando um programa executável (*. exe), por exemplo C e Pascal. Em relação ás
linguagens de baixo nível os problemas são resolvidos de forma mais fácil e rápida.
Gerações
1º Geração - Linguagem máquina ou binária e Assembly;
2º Geração – Sistemas de execução em tempo real e desenvolvimento de gestores de
Base de Dados;
Ex: COBOL, BASIC e FORTRAN IV/V.
7
8. 3º Geração - capacidade procedural e estrutura;
Ex: Pascal, C e SIMULA
4º Geração - sistemas especialistas, desenvolvimento de inteligência artificial e
execução dos programas em paralelo.
Ex: SQL e QBE.
5º Geração – Linguagens de especificação de problemas
E: LISP e PROLOG.
Estrutura de tipos
. Fracamente tipada – Ex: Smalltalk
. Fortemente tipada – ex: Java e Ruby
. Dinamicamente tipada – ex: Perl, Ruby e Python
. Estáticamente tipada - ex: Java e C
Domínios de aplicação
. Cientificas – ALGOL, BASIC e FORTRAN.
. Comerciais – COBOL.
8
9. História da Linguagem C
Poder-se ia dizer que o C é uma das maravilhas das linguagens de programação. Muitos
dos programas existentes hoje foram escritos nesta linguagem. O C foi desenvolvido nos
laboratórios na década de 70.Possui as seguintes características; portabilidade entre
máquinas e sistemas operacionais. Dados compostos em forma estruturados, total
interacção tanto com o SO como a máquina e o código compacto e rápido. Nos anos 80,
C era a linguagem mais utilizada por programadores, por permitir a escrita intensiva de
todas as características das linguagens anteriores. O Próprio UNIX e Linux foram
escritos em C, assim como o front end do MS-DOS, Windows e as aplicações Office
mais usadas no mundo (OpenOffice.org, Microsoft Office, embora cada uma delas
incluir as suas próprias linguagens de script), sendo também utilizada em aplicações
gráficas e criação de efeitos especiais nos filmes Strar Trek e Star Wars.E as vantagens
de programas extremamente rápidos e pequenos, desvantagens é o tempo de
desenvolvimento lento e sujeito a erros.
Kenneth Thompson (à esquerda) e Dennis Ritchie (à direita), os criadores da linguagem C.
O desenvolvimento inicial da linguagem C ocorreu nos laboratórios Bell da AT&T
entre 1969 e 1973. Segundo Ritchie, o periodo mais criativo ocorreu em 1972. Deu-se o
nome C à linguagem porque muitas das suas características derivaram de uma
linguagem de programação anterior chamada B. Há vários relatos que se referem à
origem do nome B: Ken Thompson dá crédito à linguagem de programação BCPL, mas
ele também criou uma outra linguagem de programação chamada Bon, em honra da sua
mulher Bonnie. Por volta de 1973, a linguagem C tinha se tornado suficientemente
poderosa para que grande parte do núcleo de UNIX, originalmente escrito na linguagem
de programação, fosse reescrito em C. Este foi um dos primeiros núcleos de sistema
operativo que foi implementado numa linguagem sem ser o Assembly, sendo exemplos
9
10. anteriores do sistema. Em 1978, Ritchie e Kernighan publicaram a primeira edição do
livro The C Programming Language. Esse livro, conhecido pelos programadores de C
como "K&R", serviu durante muitos anos como uma especificação informal da
linguagem. A versão da linguagem C que ele descreve é usualmente referida como "C
de K&R". (A segunda edição do livro cobre o posterior padrão ANSI C, descrito
abaixo.) K&R introduziram as seguintes características na linguagem:
Tipos de dados struct
Tipos de dados long int
Tipos de dados unsigned int
O operador =+ foi alterado para +=, e assim sucessivamente (a análise léxico do
compilador confundia o operador =+. Por exemplo, i =+ 10 e i = +10).
C de K&R é frequentemente considerado a parte mais básica da linguagem cujo suporte
deve ser assegurado por um compilador C. Durante muitos anos, mesmo após a
introdução do padrão C ANSI, ele era considerado o "menor denominador comum" em
que programadores de C se apoiavam quando uma portabilidade máxima era desejada,
já que nem todos os compiladores eram actualizados para suportar na íntegra o padrão C
ANSI, e o código C de K&R razoavelmente bem escrito é também válido em relação ao
C ANSI.Nos anos que se seguiram à publicação do C K&R, algumas características
"não-oficiais" foram adicionadas à linguagem, suportadas por compiladores da AT&T e
de outros vendedores.
Funções void e tipos de dados void
Funções que retornam tipos struct ou union
Campos de nome struct num espaço de nome separado para cada tipo struct
Atribuição a tipos de dados struct
Qualificadores const para criar um objecto só de leitura
Uma biblioteca-padrão que incorpora grande parte da funcionalidade
implementada por vários vendedores
Enumerações
O tipo de ponto-flutuante de precisão simples
10
11. Durante os finais da década de 1970, a linguagem C começou a substituir a
linguagem BASIC como a linguagem de programação de microcomputadores mais
usada. Durante a década de 1980, foi adoptada para uso no PC IBM, e a sua
popularidade começou a aumentar significativamente. Ao mesmo tempo, Bjarne
Stroustrup, juntamente com outros nos laboratórios Bell, começou a trabalhar num
projecto onde se adicionavam construções de linguagens de programação orientada
por objectos à linguagem C. A linguagem que eles produziram, chamada C++, é nos
dias de hoje a linguagem de programação de aplicações mais comum no sistema
operativo Windows da companhia Microsoft; C permanece mais popular no mundo
UNIX.
Objectivos e características da Linguagem C
A linguagem C surgiu com o objectivo de facilitar a criação de programas mais extensos
e com um menor número de erros apelando ao paradigma da programação algorítmica,
sobrecarregando menos o autor do compilador, visto as características desta linguagem
serem complicadas.
Dentro da linguagem C temos as seguintes características:
. É uma linguagem nuclear extremamente simples, com funcionalidades não essenciais
tais como as funções matemáticas ou manuseamento de ficheiros (arquivos), fornecida
por um conjunto de bibliotecas de rotinas padronizadas;
. A sua focalização no paradigma de programação procedimento;
. Têm um sistema de tipos simples que evita várias operações que não fazem sentido;
. O Uso de uma linguagem de pré-processamento, o pré-processador de C, para tarefas
tais como a definição de macros e a inclusão de múltiplos ficheiros de código fonte;
. Ponteiros dão maior flexibilidade à linguagem;
11
12. . Acesso de baixo nível através de inclusões de código Assembly no meio do programa
C;
. Parâmetros que são sempre passados por valor para as funções e nunca por referência
(É possível simular a passagem por referências com o uso de ponteiros);
. Definição do alcance lexical de variáveis;
Estruturas de variáveis, (structs), que permitem que dados relacionados sejam
combinados e manipulados como um todo.
Apesar das suas características atrás descritas, faltam a linguagem C outras que se
podem encontrar em outras linguagens, como por exemplo:
. Segurança de tipo;
. Colector de lixo (mais comum em linguagens interpretadas);
. Vectores que crescem automaticamente;
. Classes ou objectos com comportamento;
. Closures;
. Funções aninhadas;
. Programação genérica;
. Sobrecarga de operadores;
. Meta-programação;
. Apoio nativo de multithreading e comunicação por rede
12
13. O conceito de Variáveis
As variáveis no C podem ter qualquer nome se duas condições forem satisfeitas: o nome
deve começar com uma letra ou sublinhado (_) e os caracteres subsequentes devem ser
letras, números ou sublinhado (_). Há apenas mais duas restrições: o nome de uma
variável não pode ser igual a uma palavra reservada, nem igual ao nome de uma função
declarada pelo programador, ou pelas bibliotecas do C. Variáveis de até 32 caracteres
são aceitas. Mais uma coisa: é bom sempre lembrar que o C é "case sensitive" e
portanto deve-se prestar atenção às maiúsculas e minúsculas.
É uma prática tradicional do C, usar letras minúsculas para nomes de variáveis e
maiúsculas para nomes de constantes. Isto facilita na hora da leitura do código; Quando
se escreve código usando nomes de variáveis em português, evita-se possíveis conflitos
com nomes de rotinas encontrados nas diversas bibliotecas, que são em sua maioria
absoluta, palavras em inglês.
Os Tipos do C
O C tem 5 tipos básicos: char, int, float, void, double.O double é o ponto flutuante
duplo e pode ser visto como um ponto flutuante com muito mais precisão. O void é o
tipo vazio, ou um "tipo sem tipo".
Constantes
Constantes são valores que são mantidos fixos pelo compilador. Já usamos constantes
neste curso. São consideradas constantes, por exemplo, os números e caracteres como
45.65 ou 'n', etc.
- Constantes dos tipos básicos
Abaixo vemos as constantes relativas aos tipos básicos do C:
Exemplos de Constantes
char 'b' 'n' '0'
int 2 32000 -130
long int 100000 -467
short int 100 -30
unsigned int 50000 35678
float 0.0 23.7 -12.3e-10
double 12546354334.0 -0.0000034236556
13
14. As estruturas de controlo de fluxo são fundamentais para qualquer linguagem de
programação. Sem elas só haveria uma maneira do programa ser executado: de cima
para baixo comando por comando. Não haveria condições, repetições ou saltos. A
linguagem C possui diversos comandos de controlo de fluxo. É possível resolver todos
os problemas sem utilizar todas elas, mas devemos nos lembrar que a elegância e
facilidade de entendimento de um programa dependem do uso correcto das estruturas no
local certo.
O Comando if, comando else, comando switch, comando for, comando while,
comando break, comando continue, comando goto.
Um exemplo:
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10)
printf ("nnO numero e maior que 10");
else if (num==10)
{
printf ("nnVoce acertou!n");
printf ("O numero e igual a 10.");
}
else if (num<10)
printf ("nnO numero e menor que 10");
return(0);
}
Software para linguagem C
14
15. "IDE para programação de executáveis Win32, console ou GUI na linguagem C/C++."
Por existirem várias linguagens de programação disponíveis no mercado, cada uma
delas tinha de possuir pontos onde se especializavam mais para conseguir cativar o
interesse dos programadores.
Dentro da maioria das linguagens os seus objectivos a atingir são:
. COBOL- Processamento de Registos
. PASCAL- Ensino de Técnicas de Programação
. FORTRAN- Cálculo Científico
. LISP e PROLOG- Vocacionam para áreas de Inteligência Artificial
Já na linguagem C não existe nenhuma área de destino em particular, habitualmente se
denomina por General Purpose, esta é uma das vantagens, pois tem a capacidade de
adaptar qualquer desenvolvimento num projecto, como sistemas operativos, interfaces
gráficas, processamento de registos, ect. A linguagem C é utilizada também para
escrever compiladores de outras linguagens, é uma linguagem extraordinariamente
robusta e maleável.
Rapidez – consegue atingir performance semelhante á do Assembly, usando
instruções de alto nível, isto é instruções semelhantes há linguagem PASCAL ou
COBOL, mesmo para aceder a mecanismos de mais baixo nível, como o de
endereçamento ou manipulação de Bits.
Simples – de sintaxe extremamente simples e o número de palavras reservadas,
tipos de dados básicos e operadores é reduzido, fazendo diminuir a quantidade de tempo
e esforço necessário à aprendizagem da linguagem.
Portável – existente um standard (ANSI) que define características de qualquer
compilado, deste modo o código escrito numa máquina, pode ser então transportado
para outra máquina e compilado sem qualquer alteração, (ou com um numero reduzido).
15
16. Popular – é conhecida internacionalmente e utilizada, esta porem muito bem
documentada em livros, revistas de especialidade, manuais, etc. Existe compiladores
para qualquer tipo de arquitecturas e computadores.
Modular – permite o desenvolvimento modular em aplicações, facilitando a
separação de projectos em módulos distintos, independentes, recorrendo à utilização de
funções específicas de cada módulo.
Alto Nível – há a possibilidade de manipular a memória directamente, utilizando o
endereço de qualquer objecto (seja variável ou função), manipulando directamente a
memória sem ter qualquer restrição o que aumenta a flexibilidade da linguagem.
Livrarias muito poderosas – tem um número reduzido de palavras-chave, o que
indica que as suas capacidades são limitadas na realidade. A maior parte das
funcionalidades da linguagem são-lhe adicionadas pela sua utilização de funções
existentes em livrarias adicionais e realizam todo o tipo de tarefas, deste a escrita no
ecrã ate ao seu processamento de strings, etc.
Macros – Utilizada no desenvolvimento de aplicações, reduzindo assim a
necessidade de escrita de funções distintas na realização do mesmo processamento, em
todos os tipos de dados. As Macros permitem aumentar a velocidade de execução sem
este ter que aumentar a complexidade de escrita do código.
Focus – Permite ao programador a escrita do código, como pretender, no qual o
programa pode ser escrito numa só linha e dividido em inúmeras linhas. Apenas tem de
se preocupar com objectivo e a correcção da aplicação que está a desenvolver, do modo
a que no final o resultado seja o desejado, n é necessário formatar o código a partir da
coluna X e os dados a partir da coluna Y como acontece com outras linguagens.
Evolução – A evolução das linguagens, fez que também o C evoluísse no sentido da
Linguagens Orientadas por Objectos, dando origem a nova Linguagem C++ qual se
mantém a sintaxe da Linguagem C, e permite um conjunto adicional de características
(Encapsulamento, Hereditariedade, Polimorfismo, Overloading, etc.). Actualmente a
nova linguagem – JAVA – apresentou-se com base alargada de trabalho para
programadores. Também esta linguagem se baseia na C e C++. Foram algumas razões
indicadas para aprender a programar na Linguagem C.
16
17. Código Fonte
O código fonte é um conjunto de palavras ou símbolos escritos de uma forma ordenada
contendo instruções em uma das linguagens de programação existentes de maneira
lógica (in Wikipédia). No inicio um programador compõe o programa de uma certa
linguagem (C++ ou Visula Basic), o programador de sistemas tem toda a autonomia de
poder alterar a forma como um programa funciona, ao adicionar recursos e a remover
outros. O código fonte permite que o programador consiga expor o programa de uma
forma nítida aos humanos, para que consiga definir o programa executável, é necessário
que o código fonte seja traduzido para o código de máquina do processador que se
ajuste á arquitectura do sistema.
Na figura de cima podemos verificar um exemplo de código fonte
Código de Máquina
Também conhecido por linguagem do computador ou sistema binário, é a linguagem
mais baixa de programação e a única que o processador e restante Hardware entendem.
É unicamente constituída por 0 e 1 que representam On e Off, ou seja, se existe ou não
passagem de corrente, mas que permite escrever absolutamente tudo com apenas estes
dois números. Ex: Letra A corresponde a 1010 0001.
17
18. Programa Fonte – é o programa original, escrito numa qualquer linguagem de
programação.
Programa objecto – é o programa gerado após o programa fonte ter sido compilado,
por um compilador e escrito em linguagem máquina.
Software de Tradução
O Software de tradução é constituído por Compiladores e Interpretadores, que fazem
a conversão de uma linguagem de alto nível (C, C++, Pascal, etc.) para uma linguagem
de baixo nível, linguagem máquina, ou seja, tem a sua função é a de traduzir uma
linguagem abstracta para uma linguagem binária. Processam dados de entrada e geram
dados de saída.
Compilador
É um programa ou um conjunto de programas, que no momento de execução de um
programa, traduz cada instrução para uma linha de código que é interpretado pelo
computador, que será executada apenas após a sua completa tradução. Os compiladores
analisam o código em 3 formas diferentes:
- Sintáctica ou hierárquica;
- Léxica ou linear;
18
19. - Semântica
São o tipo de tradutores mais utilizados e alguns deles possuem pré-processamento, que
modifica e optimiza o código-fonte conforme as suas necessidades.
Programa Compilador Compile
Time
Run
input Códi go output Time
Vantagens
- O código compilado é mais rapidamente executado;
- Impossibilita ou pelo menos dificulta quebrar e visualizar o código-fonte original;
- Permite a optimização do código por parte do compilador;
- Compila o código somente após verificar se tem algum erro.
- Permite estrutura de dados mais complexas.
Desvantagens
- O código necessita de passar por muitos níveis de compilação até ser utilizado;
- O processo de correcção ou alteração do código exige que o mesmo seja novamente
compilado;
- A Impossibilidade de visualizar e modificar o código-fonte.
19
20. Interpretador
O interpretador apesar de assumir um papel semelhante ao compilador não gera código-
objecto. Ao contrário do compilador, lê, traduz e executa cada linha de código
sequencialmente. Permite a utilização do programa á medida que vai sendo traduzido,
cada nova execução do programa requer nova tradução e interpretação.
Programa
input Interpretador output
Vantagens
- O código não precisa ser compilado para ser executado;
- Correcções e alterações mais rápidas de executar;
- Consomem menos memória;
Desvantagens
- A execução do programa é mais lenta;
- É necessário ler sempre o código original para ser executado,
- Estrutura de dados demasiadamente simples.
20
21. Conclusão
Com a realização deste trabalho podemos concluir que a linguagem C é uma linguagem
de nível médio, por oferecer elementos de linguagem de alto nível e recursos do tipo
Assembler. A linguagem C acaba por ser a linguagem mais utilizada ao nível da
programação de sistemas (compiladores, sistemas operacionais), pois permite-nos a
manipulação de bits, bytes e endereços com que o computador funciona. Já o código
fonte tem como objectivo fazer que o programador descreva o programa de forma nítida
as pessoas. Para conseguirmos executar um programa é necessário traduzir o código
fonte em código máquina, visto esta ser a única linguagem que os computadores
compreendem. Já em relação aos compiladores e aos interpretadores tem como função
operarem sobre o código fonte do programa.
21
22. Fontes de consultas:
Livro C/C++ de Renato Haddad
Linguagem de Programação – trabalha realizado por Nuno Marques
http://www.oficinadanet.com.br/artigo/1527/diferencas_entre_compiladores_e_interpret
adores
http://blog.uncovering.org/archives/2007/09/linguagens_de_p.html#ixzz0Y1JDv3c3
http://logbr.reflectivesurface.com/2003/03/26/evolucao-das-linguagens-de-
programacao/
http://www.criarweb.com/artigos/685.php
http://msdn.microsoft.com/pt-br/magazine/cc500572.aspx
http://www.dcc.ufla.br/~monserrat/icc/Capitulo3.html
22